﻿<html DIR="LTR" xmlns:tool="http://www.microsoft.com/tooltip" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ddue="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
  <head>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8" />
    <META NAME="save" CONTENT="history" />
    <title>Compreendendo os níveis de isolamento</title>
    
    <link rel="stylesheet" type="text/css" href="../local/Classic.css">
      
    </link>
    
    <script src="../local/script.js">
      
    </script><script src="../local/script_main.js">&amp;nbsp;</script>
  </head>
  <body>
    <!--Topic built:04/01/2010 05:03:30-->

    
    
    
    
    
    
    
    
    
    <div id="header">
      <table width="100%" id="topTable"><tr>
          <td align="left">
            <span id="headerBold">Compreendendo os níveis de isolamento</span>
          </td>
          <td align="right">
            
          </td>
        </tr></table>
      
      
      
    </div>
    <div id="mainSection">
      
        
        
    <font color="DarkGray">
      
    </font>
    <p />
    
    <p />
  
        <div id="introductionSection" class="section">
    <p>As transações especificam um nível de isolamento que define o grau em que uma transação deve ser isolada de modificações de recurso ou de dados feitas por outras transações. Os níveis de isolamento são descritos em termos de quais efeitos colaterais de simultaneidade são permitidos, como leituras sujas ou leituras fantasma. </p>
    <p>Os níveis de isolamento da transação controlam o seguinte:</p>
    <ul><li>
        Se bloqueios serão feitos quando os dados forem lidos, e que tipo de bloqueio será solicitado.<br />
      </li><li>
        Por quanto tempo os bloqueios de leitura serão mantidos.<br />
      </li><li>
        Se uma operação de leitura que referencia linhas foi modificada por outra transação:<br />
        <ul><li>
            É bloqueada até que o bloqueio exclusivo na linha é liberado.<br />
          </li><li>
            Recupera a versão confirmada da linha que existia no momento em que a instrução ou transação foi iniciada.<br />
          </li><li>
            Lê a modificação de dados não confirmada.<br />
          </li></ul>
      </li></ul>
    <p>A escolha de um nível de isolamento de transação não afeta os bloqueios adquiridos para proteger as modificações de dados. Uma transação sempre obtém um bloqueio exclusivo em quaisquer dados que ela modifica e mantém esse bloqueio até que a transação seja concluída, seja qual for o nível de isolamento definido para essa transação. Para operações de leitura, níveis de isolamento da transação definem principalmente o nível de proteção dos efeitos das modificações feitas por outras transações.</p>
    <p>Um nível de isolamento mais baixo aumenta a capacidade de muitos usuários acessarem os dados ao mesmo tempo, porém aumenta o número de efeitos de simultaneidade, como leituras sujas ou atualizações perdidas, que podem afetar os usuários. Por outro lado, um nível de isolamento mais alto reduz os tipos de efeitos de simultaneidade que os usuários podem encontrar, porém requer mais recursos do sistema e aumenta as chances de uma transação bloquear outra. A escolha do nível de isolamento apropriado dependerá do equilíbrio dos requisitos de integridade dos dados do aplicativo em relação à sobrecarga de cada nível de isolamento. O nível de isolamento mais alto, serializável, garante que uma transação recuperará exatamente os mesmos dados toda vez que repetir uma operação de leitura, mas faz isto executando um nível de bloqueio que provavelmente causará impacto em outros usuários em sistemas multiusuário. O nível de isolamento mais baixo, leitura não confirmada, pode recuperar dados que foram modificados mas não confirmados por outras transações. Todos os efeitos colaterais da simultaneidade podem ocorrer na leitura não confirmada, mas não há nenhum bloqueio de leitura ou controle de versão, portanto, a sobrecarga é minimizada.</p>
    <p>A tabela a seguir mostra os efeitos colaterais da simultaneidade permitidos pelos diferentes níveis de isolamento.</p>
    <table width="100%" cellspacing="0" cellpadding="0" border="1" style="background-color: #CCCCCC;"><tr>
          <th>
            Nível de Isolamento
          </th>
          <th>
            Leitura suja
          </th>
          <th>
            Leitura não repetível
          </th>
          <th>
            Fantasma
          </th>
        </tr><tr>
        <td>
          <p>Leitura não confirmada</p>
        </td>
        <td>
          <p>Sim</p>
        </td>
        <td>
          <p>Sim</p>
        </td>
        <td>
          <p>Sim</p>
        </td>
      </tr><tr>
        <td>
          <p>Leitura confirmada</p>
        </td>
        <td>
          <p>Não</p>
        </td>
        <td>
          <p>Sim</p>
        </td>
        <td>
          <p>Sim</p>
        </td>
      </tr><tr>
        <td>
          <p>Leitura repetível</p>
        </td>
        <td>
          <p>Não</p>
        </td>
        <td>
          <p>Não</p>
        </td>
        <td>
          <p>Sim</p>
        </td>
      </tr><tr>
        <td>
          <p>Instantâneo</p>
        </td>
        <td>
          <p>Não</p>
        </td>
        <td>
          <p>Não</p>
        </td>
        <td>
          <p>Não</p>
        </td>
      </tr><tr>
        <td>
          <p>Serializável</p>
        </td>
        <td>
          <p>Não</p>
        </td>
        <td>
          <p>Não</p>
        </td>
        <td>
          <p>Não</p>
        </td>
      </tr></table>
    <p>As transações devem ser executadas em um nível de isolamento de pelo menos leitura repetível para impedir atualizações perdidas que podem ocorrer quando duas transações recuperam a mesma linha e, em seguida, atualizam a linha com base nos valores originalmente recuperados. Se as duas transações atualizarem as linhas usando uma única instrução UPDATE e não basearem a atualização nos valores previamente recuperados, as atualizações perdidas não poderão ocorrer no nível de isolamento padrão de leitura confirmada.</p>
    <p>Para definir o nível de isolamento de uma transação, você pode usar o método <a href="6a8fa4d3-5237-40f8-8a02-b40a3d7a1131.htm">setTransactionIsolation</a> da classe <a href="937292a6-1525-423e-a2b2-a18fd34c2893.htm">SQLServerConnection</a>. Esse método aceita um valor <b>int</b> como seu argumento, que tem como base uma das constantes de conexão como no exemplo a seguir:</p>
    <div class="sampleCode"><span codeLanguage="other"><pre>con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);</pre></span></div>
    <p>Para usar o novo nível de isolamento de instantâneo do SQL Server, você pode usar um das constantes <b>SQLServerConnection</b> como neste exemplo:</p>
    <div class="sampleCode"><span codeLanguage="other"><pre>con.setTransactionIsolation(SQLServerConnection.TRANSACTION_SNAPSHOT);</pre></span></div>
    <p>ou pode usar:</p>
    <div class="sampleCode"><span codeLanguage="other"><pre>con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED + 4094);</pre></span></div>
    <p>Para obter mais informações sobre os níveis de isolamento do SQL Server, consulte "Níveis de isolamento no Mecanismo de Banco de Dados" nos Manuais Online do SQL Server.</p>
  </div><span id="seeAlsoSpan"><h1 class="heading">Consulte também</h1></span><div id="seeAlsoSection" class="section" name="collapseableSection"><a href="afbb776f-05dc-4e79-bb25-2c340483e401.htm">Executando transações com o JDBC Driver</a><br /><br /></div><!--[if gte IE 5]>
			<tool:tip element="seeAlsoToolTip" avoidmouse="false"/><tool:tip element="languageFilterToolTip" avoidmouse="false"/><tool:tip element="roleInfoSpan" avoidmouse="false"/>
		<![endif]-->
      <div id="footer" class="section">
        
		<hr />
		
		<span id="fb" class="feedbackcss">
			
			
		</span>
		
		<a href="9bad553b-9e70-4696-8499-2e35f772a1e0.htm">
			
			© 2010 Microsoft Corporation. Todos os direitos reservados.
		</a>
 	
	
      </div>
    </div>
  </body>
</html>